package spring.cloud.tasks.common.curator;

import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;

/**
 * 命名空间认证信息:用于连接Zookeeper并切换到命名空间的基本信息
 */

@Slf4j
@Setter
@Getter
public class CuratorInfo {
    private String description;
    private String zookeeperKey;
    private String addressList;
    private String digest;
    private String namespaceKey;

    public CuratorInfo() {
    }

    //该代码用来测试 zk连接超时的情况。
    //    public void setTestSessionLostArgs(){
    //        sessionTimeoutSeconds=5;
    //        baseSleepTimeSeconds=5;
    //        maxRetries=1;
    //        maxSleepSeconds=5;
    //    }

    /**
     * 到时候大家自己对下面的参数自己修改吧(修改源代码)
     */
    @Slf4j
    @Setter
    @Getter
    static class CuratorSetting {
        //
        public static final int MILLISECONDS = 1000;
        //
        int connectionTimeoutSeconds;//连接超时时间-单位秒。
        int sessionTimeoutSeconds;//会话超时时间-单位秒。
        //
        int baseSleepTimeSeconds;//等待重试的间隔时间的初始值-单位秒。
        int maxRetries;//等待重试的最大次数
        int maxSleepSeconds;//等待重试的间隔时间的最大值-单位秒。
        //
        int maxWaitTimeSeconds;
    }

    static class ShortTimeCuratorSetting extends CuratorSetting {
        public ShortTimeCuratorSetting() {
            super.connectionTimeoutSeconds = 16;//连接超时时间-单位秒。
            super.sessionTimeoutSeconds = 60;//会话超时时间-单位秒。
            //
            super.baseSleepTimeSeconds = 60;//等待重试的间隔时间的初始值-单位秒。
            super.maxRetries = 60;//等待重试的最大次数
            super.maxSleepSeconds = 60;//等待重试的间隔时间的最大值-单位秒。
            //
            super.maxWaitTimeSeconds = super.connectionTimeoutSeconds;//等待时间不能太长
        }
    }

    static class LongTimeCuratorSetting extends CuratorSetting {
        public LongTimeCuratorSetting() {
            super.connectionTimeoutSeconds = 60;//连接超时时间-单位秒。
            super.sessionTimeoutSeconds = 60;//会话超时时间-单位秒。
            //
            super.baseSleepTimeSeconds = 60;//等待重试的间隔时间的初始值-单位秒。
            super.maxRetries = 60;//等待重试的最大次数
            super.maxSleepSeconds = 60;//等待重试的间隔时间的最大值-单位秒。
            //
            super.maxWaitTimeSeconds = super.connectionTimeoutSeconds;//等待时间能相对久一点
        }
    }


}
